package com.cyl.manager.pms.service;

import java.util.List;
import java.time.LocalDateTime;

import com.cyl.manager.pms.convert.BrandConvert;
import com.cyl.manager.pms.domain.service.BrandDomainService;
import com.cyl.manager.pms.req.BrandReq;
import com.cyl.manager.pms.resp.BrandResp;
import com.github.pagehelper.PageHelper;
import com.sincere.common.utils.SecurityUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import com.cyl.manager.pms.domain.entity.Brand;
import com.cyl.manager.pms.req.BrandQueryReq;

/**
 * 品牌管理Service业务层处理
 *
 *
 * @author zcc
 */
@Service
@Slf4j
@RequiredArgsConstructor
public class BrandService {


    private final BrandDomainService brandDomainService;

    /**
     * 查询品牌管理
     *
     * @param id 品牌管理主键
     * @return 品牌管理响应对象
     */
    public BrandResp queryBrandDetail(Long id) {
        Brand brand = brandDomainService.getById(id);
        return BrandConvert.INSTANCE.entity2Resp(brand);
    }

    /**
     * 查询品牌管理列表
     *
     * @param query 查询条件
     * @param page 分页条件
     * @return 品牌管理分页数据
     */
    public Page<BrandResp> queryBrandByPage(BrandQueryReq query, Pageable page) {
        if (page != null) {
            PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
        }
        List<Brand> brandList = brandDomainService.listByPage(query, page);
        List<BrandResp> respList = BrandConvert.INSTANCE.entityList2RespList(brandList);
        return new PageImpl<>(respList, page, ((com.github.pagehelper.Page)brandList).getTotal());
    }

    /**
     * 导出品牌管理列表
     */
    public List<BrandResp> exportBrandList(BrandQueryReq query) {
        List<Brand> list = brandDomainService.listByPage(query, null);
        return BrandConvert.INSTANCE.entityList2RespList(list);
    }

    /**
     * 查询所有品牌管理列表
     */
    public List<BrandResp> queryAllBrand() {
        List<Brand> list = brandDomainService.findAllBySortAsc();
        return BrandConvert.INSTANCE.entityList2RespList(list);
    }

    /**
     * 新增品牌管理
     *
     * @param req 品牌请求对象
     * @return 结果
     */
    public Boolean create(BrandReq req) {
        Brand brand = BrandConvert.INSTANCE.req2Entity(req);
        brand.setCreateTime(LocalDateTime.now());
        return brandDomainService.save(brand);
    }

    /**
     * 修改品牌管理
     *
     * @param req 品牌请求对象
     * @return 结果
     */
    public Boolean update(BrandReq req) {
        Brand brand = BrandConvert.INSTANCE.req2Entity(req);
        brand.setUpdateTime(LocalDateTime.now());
        brand.setUpdateBy(SecurityUtils.getUserId());
        return brandDomainService.updateById(brand);
    }

    /**
     * 获取所有品牌列表
     *
     * @return 品牌响应对象列表
     */
    public List<BrandResp> listBrands() {
        List<Brand> brands = brandDomainService.findAllBySortAsc();
        return BrandConvert.INSTANCE.entityList2RespList(brands);
    }

    /**
     * 根据ID获取品牌详情
     *
     * @param id 品牌ID
     * @return 品牌响应对象
     */
    public BrandResp getBrandById(Long id) {
        Brand brand = brandDomainService.getById(id);
        return BrandConvert.INSTANCE.entity2Resp(brand);
    }

    /**
     * 删除品牌管理信息
     *
     * @param id 品牌管理主键
     * @return 结果
     */
    public Boolean deleteById(Long id) {
        Brand brand = brandDomainService.getById(id);
        brand.setDeleted(true);
        brand.setUpdateTime(LocalDateTime.now());
        brand.setUpdateBy(SecurityUtils.getUserId());
        return brandDomainService.updateById(brand);
  }
}
